#include <SDL2/SDL.h>

class Renderer {
public:
    static Renderer& getInstance() {
        static Renderer instance;
        return instance;
    }

    void draw() {
        SDL_RenderClear(renderer_);
        // 绘制图形...
        SDL_RenderPresent(renderer_);
    }

private:
    Renderer() {
        SDL_Init(SDL_INIT_VIDEO);
        window_ = SDL_CreateWindow("Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, 0);
        renderer_ = SDL_CreateRenderer(window_, -1, SDL_RENDERER_ACCELERATED);
    }

    ~Renderer() {
        SDL_DestroyRenderer(renderer_);
        SDL_DestroyWindow(window_);
        SDL_Quit();
    }

    SDL_Window* window_ = nullptr;
    SDL_Renderer* renderer_ = nullptr;
};

// 使用示例
// 5. 图形渲染引擎
// 场景：游戏或 GUI 程序中，需要唯一的渲染上下文。
// 特点：
// 确保渲染资源（窗口、上下文）唯一。
// 自动释放资源（RAII）。
int main() {
    Renderer::getInstance().draw();
    return 0;
}


// 总结
// 场景	        单例优势	                        实现方式推荐
// 日志系统	    全局唯一输出，避免多实例冲突	    C++11 局部静态变量
// 配置管理	    统一配置存储，延迟加载	            饿汉式或懒汉式
// 连接池	    复用资源，控制并发连接数	        懒汉式 + 智能指针
// 线程池	    全局任务调度，资源复用	            C++11 局部静态变量
// 渲染引擎	    唯一硬件上下文，避免资源竞争	    饿汉式或懒汉式